package cn.song.freight.domain.entity;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.fasterxml.jackson.annotation.JsonFormat;
import io.swagger.annotations.ApiModel;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.format.annotation.DateTimeFormat;

import java.math.BigDecimal;
import java.util.Date;

/**
 * 重量区间规则数据对象 (DO)
 *
 * 该实体类代表运费策略中的重量区间定价规则。
 * V3版本调整：直接关联到定价配置，支持不同定价配置使用不同的重量规则。
 * 重量区间规则允许按照不同的重量范围设置差异化的运费标准，
 * 实现阶梯式计费模式。
 *
 * 功能特点：
 * 1. 支持多区间分段计费：可以为不同重量范围设置不同的运费标准
 * 2. 重量上限控制：通过upperBound字段定义每个区间的重量上限
 * 3. 精确计费：使用BigDecimal类型确保货币计算精度
 * 4. 分定价配置管理：每个规则关联到特定的定价配置（V3新增）
 *
 * 使用场景：
 * - 经济型快递：0-1kg：8元，1-3kg：12元，3kg以上：15元
 * - 特快专递：0-0.5kg：15元，0.5-2kg：20元，2kg以上：25元
 *
 * 注意事项：
 * - 同一定价配置下的区间不应重叠
 * - 系统默认按重量上限(upperBound)升序排序进行区间匹配
 *
 * 数据库表名：weight_segment_rule
 *
 * @author System
 * @since 1.0.0
 * @version 3.0.0 V3版本新增pricing_id字段
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
@TableName("weight_segment_rule")
@ApiModel(description = "重量区间规则表")
public class WeightSegmentRuleDO {
    /**
     * 主键ID
     */
    @TableId(type = IdType.AUTO)
    @ApiModelProperty(value = "主键ID")
    private Long id;
    /**
     * 所属运费策略ID
     */
    @TableField("strategy_id")
    @ApiModelProperty(value = "所属运费策略ID")
    private Long strategyId;

    /**
     * 关联的定价配置ID（V3新增）
     * 关联strategy_area_pricing表的主键
     */
    @TableField("pricing_id")
    @ApiModelProperty(value = "关联的定价配置ID", required = true)
    private Long pricingId;
    /**
     * 重量上限（kg）
     */
    @TableField("upper_bound")
    @ApiModelProperty(value = "重量上限（kg）")
    private BigDecimal upperBound;
    /**
     * 该区间邮资（元）
     */
    @TableField("freight")
    @ApiModelProperty(value = "该区间邮资（元）")
    private BigDecimal freight;
    /**
     * 创建时间
     */
    @TableField("create_time")
    @ApiModelProperty(value = "创建时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date createTime;
    /**
     * 最后更新时间
     */
    @TableField("update_time")
    @ApiModelProperty(value = "最后更新时间")
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    @DateTimeFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date updateTime;
    /**
     * 操作人
     */
    @TableField("operator")
    @ApiModelProperty(value = "操作人")
    private String operator;
}
